#include <string.h>
#include <stdlib.h>
#include "stack.h"

int stack_init(Stack* stack, int elemSize) {
    return vectorInit(stack, elemSize);
}

void stack_push(Stack* stack, void *data) {
    vectorAppend(stack, data);
}

void *stack_pop(Stack* stack) {
    return vectorRemove(stack, stack->size - 1);
}

void *stack_get(Stack* stack, int idx) {
    return vectorGet(stack, idx);
}

void stack_set(Stack* stack, void* data, int idx) {
    void* val = stack_get(stack, idx);
    memcpy(val, data, stack->elementSize);
}

void *stack_peek(Stack* stack) {
    void* target =  vectorGet(stack, stack->size - 1);
    void* res = malloc(stack->elementSize);
    memcpy(res, target, stack->elementSize);
    return res;
}
